import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'


Vue.use(VueAxios, axios)

const instance  =  axios.create({
    baseURL:'http://toutiao-app.itheima.net',
  timeout: 10000,
  transformResponse: [function (data) {
    // 对 data 进行任意转换处理
    try {
       return JSONbig.parse(data);
    } catch (e) {
      if (data) {
          return JSON.parse(data)
      } else {
        return data
        }
    }
    return data;
  }],
})

import { getToken,setToken,removeToken} from './token'
import router from '@/router/index.js'
import { Toast } from 'vant'
import JSONbig from 'json-bigint'
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    if(getToken()) config.headers = {authorization:`Bearer ${getToken().token}`}
    return config;
  }, function (error) {
    // 对请求错误做些什么
    console.log(error);
    return Promise.reject(error);
  });

  // 添加响应拦截器
  instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  },
    //   响应失败
     async function (error) {
         if (error.response.status === 401) {
             if (getToken()) {
                 try {
                 //刷新token
                const str = await axios({
                    url: 'http://toutiao-app.itheima.net/v1_0/authorizations',
                    method: 'put',
                    headers:{Authorization: `Bearer ${getToken().refresh_token}`}
                })
                // 成功：更新token,返回当前页
                 let tokenstr = getToken()
                     tokenstr.token = str.data.data.token
                     setToken(tokenstr)
                     return instance(error.config)
                 } catch (err) {
                     Toast.fail('请重新登录')
                     removeToken()
                    router.push('/login')
                }
             } else {
                Toast.fail('请重新登录')
                router.push('/login')
             }
        }
    return Promise.reject(error);
  });

export default instance